<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        width: 100px;
        height: 100px;
        background-color: red;
        position: absolute;
        left: 0px;
        top: 0px;
      }
    </style>
  </head>

  <body>
    <div class="box"></div>
    <script>
      // 二、方块的运动函数；
      function move(boxEle, dir, target) {
        return new Promise((resolve, reject) => {
          var timer = setInterval(function () {
            // 获取当前box的left值
            var num3 = parseInt(getComputedStyle(boxEle)[dir]);
            // 当前方块所在的位置 和 目标位置比较
            num3 += 5 * (target > num3 ? 1 : -1);
            boxEle.style[dir] = num3 + "px";
            // 假定 运动 500的时候开始向下移动；
            if (num3 == target) {
              clearInterval(timer);
              console.log("停止了");
              resolve();
            }
          }, 10);
        });
      }

      var boxEle = document.querySelector(".box");

      // 同时执行 ； 什么时候 运动结束了；
      // 可以通过回调函数实现 停止之后再执行逻辑
      // 回调函数 callback：
      // move(boxEle, "left", 500, function () {
      //   console.log("执行了");
      //   move(boxEle, "top", 500, function () {
      //     console.log("第二次执行完毕");
      //     move(boxEle, "left", 0, function () {
      //       console.log("第三次执行完毕");
      //       move(boxEle, "top", 0, function () {
      //         console.log("所有都执行完毕");
      //       });
      //     });
      //   });
      // });
      // move(boxEle,"top",500);

      // move(boxEle, "left", 500)
      //   .then(() => {
      //     return move(boxEle, "top", 500);
      //   })
      //   .then(() => {
      //     return move(boxEle, "left", 0);
      //   })
      //   .then(() => {
      //     return move(boxEle, "top", 0);
      //   })
      //   .then(() => {
      //     return move();
      //   });

      (async function () {
        try {
          await move(boxEle, "left", 500);
          console.log(111);
          await move(boxEle, "top", 500);
          console.log(222);
          await move(boxEle, "left", 0);
          await move(boxEle, "top", 0);
        } catch (err) {
          console.log(err);
        }
      })();
    </script>
  </body>
</html>
